// src/utils/response.js

import axios from 'axios';
import { ElMessage } from 'element-plus'; // 使用 Element UI 的消息组件来显示错误或成功信息

// 创建 axios 实例
const instance = axios.create({
  baseURL: '/amsp',  // 可以根据实际的后端 API 地址调整
  timeout: 60000,   // 请求超时时间
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在请求发送之前可以做一些处理，比如添加 token
    const token = localStorage.getItem('token'); // 这里假设 token 保存在 localStorage
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }

    if (config && config.params && config.params.noToast !== undefined) {
      config.noToast = config.params.noToast;
      delete config.params.noToast;
    }

    // console.log(config, "config")

    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 可以根据响应的状态码来做不同的处理
    const data = response.data;
    // 假设后端返回数据结构是 { code: 200, data: {}, message: 'message' }
    if (data.code === 200) {
      // 请求成功，返回数据
      return data;
    } else {
      if (response.config.noToast) {
        return data;
      } else {
        // 请求失败，统一处理错误信息
        ElMessage.error(data.message || '请求失败');
        // return Promise.reject(new Error(data.message || '请求失败'));
      }
    }
  },
  error => {
    // 对响应错误做统一处理
    if (error.response) {
      // 服务器返回了错误响应
      const { status } = error.response;
      if (status === 401) {
        // Token 过期或未授权
        ElMessage.error('未授权，请登录');
        // 跳转到登录页面等处理逻辑
      } else if (status === 500) {
        // 后端服务器内部错误
        ElMessage.error('服务器错误，请稍后再试');
      } else {
        // 其他错误
        ElMessage.error(error.message || '请求出错');
      }
    } else {
      // 请求未发送（可能是网络问题）
      ElMessage.error('网络异常，请检查您的网络连接');
    }
    return Promise.reject(error);
  }
);

// 封装 GET、POST 等请求方法
const request = {
  get(url, params = {}) {
    return instance.get(url, { params });
  },
  post(url, data = {}) {
    return instance.post(url, data);
  },
  put(url, data = {}) {
    return instance.put(url, data);
  },
  delete(url, params = {}) {
    return instance.delete(url, { params });
  },
  options(url, params = {}) {
    return instance.options(url, { params });
  },
};

export default request;
